"""
配置管理模块

负责管理项目中的所有目录路径和配置文件位置，
为整个项目提供统一的路径访问接口。
"""

import os
import sys


class ConfigManager:
    """
    管理项目目录和配置文件
    提供统一的路径和配置访问接口
    """

    # 基础目录定义
    DIR_CURR = os.path.abspath(__file__)
    DIR_CONF = os.path.dirname(os.path.abspath(__file__))
    DIR_BASE = os.path.dirname(DIR_CONF)
    
    # 核心目录
    DIR_COMM = os.path.join(DIR_BASE, "common")
    DIR_UTIL = os.path.join(DIR_BASE, "utils")
    DIR_PAGE = os.path.join(DIR_BASE, 'page_object')
    DIR_ELEMENT = os.path.join(DIR_BASE, "page_element")
    DIR_DRIVER = os.path.join(DIR_BASE, "driver")
    
    # 输出目录
    DIR_REPORT = os.path.join(DIR_BASE, "outFiles", "report")
    DIR_LOG = os.path.join(DIR_BASE, "outFiles", "logs")
    
    # 测试数据目录
    DIR_TESTDATA = os.path.join(DIR_BASE, "testdata")
    DIR_WEB_TESTDATA = os.path.join(DIR_TESTDATA, "web")
    
    def __init__(self):
        """初始化配置管理器，设置运行环境"""
        # 获取环境参数，默认test环境
        self.env = os.environ.get('TEST_ENV', 'test')
        self.log_info(f"当前运行环境: {self.env}")
    
    def log_info(self, msg):
        """简单的日志记录函数，避免导入错误"""
        print(f"INFO: {msg}")
    
    @property
    def web_ini_file(self):
        """web配置文件路径"""
        ini_file = os.path.join(self.DIR_CONF, 'web_cfg.ini')
        if not os.path.exists(ini_file):
            raise FileNotFoundError(f"配置文件{ini_file}不存在！")
        return ini_file
    
    @property
    def get_env(self):
        """获取当前环境"""
        return self.env
    
    @property
    def test_web_yaml_files(self):
        """测试数据文件列表（YAML格式）"""
        return [os.path.join(self.DIR_WEB_TESTDATA, 'test_baidu_data.yaml'), 
                os.path.join(self.DIR_WEB_TESTDATA, 'test_sk_data.yaml')]
    
    @property
    def test_baidu_json_file(self):
        """百度测试的JSON数据文件"""
        json_file = os.path.join(self.DIR_WEB_TESTDATA, 'test_baidu_data.json')
        if not os.path.exists(json_file):
            raise FileNotFoundError(f"测试数据文件{json_file}不存在！")
        return json_file

    @property
    def dir_log(self):
        """日志目录"""
        os.makedirs(self.DIR_LOG, exist_ok=True)
        return self.DIR_LOG

    @property
    def log_file(self):
        """日志文件路径"""
        # 延迟导入以避免循环依赖
        try:
            from utils.timer import dt_strftime
            return os.path.join(self.dir_log, f'test_{dt_strftime()}.log')
        except ImportError:
            return os.path.join(self.dir_log, 'test.log')

    @property
    def dir_img(self):
        """截图目录"""
        img_dir = os.path.join(self.dir_log, 'images')
        os.makedirs(img_dir, exist_ok=True)
        return img_dir

    @property
    def img_file(self):
        """截图文件路径（带时间戳）"""
        try:
            from utils.timer import dt_strftime
            return os.path.join(self.dir_img, f'{dt_strftime("%Y%m%d%H%M%S")}.png')
        except ImportError:
            return os.path.join(self.dir_img, 'screenshot.png')

    @property
    def dir_report_json(self):
        """allure报告JSON目录"""
        json_dir = os.path.join(self.DIR_REPORT, "json")
        os.makedirs(json_dir, exist_ok=True)
        return json_dir
    
    @property
    def dir_report_html(self):
        """allure报告HTML目录"""
        html_dir = os.path.join(self.DIR_REPORT, "html")
        os.makedirs(html_dir, exist_ok=True)
        return html_dir

    @property
    def web_driver(self):
        """浏览器驱动路径"""
        driver_path = os.path.join(self.DIR_DRIVER, 'chromedriver.exe')
        if not os.path.exists(driver_path):
            raise FileNotFoundError(f"浏览器驱动{driver_path}不存在！")
        return driver_path


# 创建配置管理器实例
cm = ConfigManager()

# 延迟导入，避免循环依赖
try:
    from utils.logger import log
    # 重新设置log_info函数以使用真实的logger
    ConfigManager.log_info = lambda self, msg: log.info(msg)
except ImportError:
    # 如果导入失败，继续使用简单的打印函数
    pass
